<?php
/**
 * Db对象-抽象类
*/
namespace houze\db\lib;

abstract class Db {
    /**
     * Mysql连接池实例
    */
    protected $pool;
    /**
     * 连接池类型
    */
    protected $type;
    /**
     * 表前缀
    */
    public $prefix;
    /**
     * SQL构造器反射类
    */
    protected $sql_ref;
    /**
     * SQL构造器
    */
    protected $sql;
    /**
     * 调试模式
    */
    protected $debug;
    /**
     * 是否使用的连接池
    */
    protected $is_pool;
    /**
     * 是否归还了链接
    */
    protected $return_status = false;

    /**
     * 选择连接池
    */
    abstract public function __construct($data=null);

    /**
     * 利用析构函数，防止有漏掉没归还的连接，让其自动回收，减少不规范的开发者
    */
    abstract public function __destruct();

    /**
     * 归还连接池
    */
    abstract public function return();

    /**
     * 开启事务
    */
    abstract public function begin();

    /**
     * 提交事务
    */
    abstract public function commit();

    /**
     * 回滚事务
    */
    abstract public function rollback();

    /**
     * 执行Query操作
    */
    abstract public function query($sql, $status=true);

    /**
     * 执行新增的SQL操作
    */
    abstract public function exec($sql);

    /**
     * SQL构造器注入
    */
    abstract public function __call($name, $arguments=[]);
}